// 路由鉴权

import router from '@/router'
// @ts-expect-error 忽略ts类型检查
import NProgress from 'nprogress'
NProgress.configure({ showSpinner: false })

import useUserStore from '@/store/modules/user.ts'
import { ElNotification } from 'element-plus'
import setting from '@/setting.ts'

router.beforeEach(async (to, from, next) => {
  NProgress.start()
  /*
  路由分类
  登录|首页|数据大屏|权限管理（3个子路由）|商品管理（2个子路由）|404

  登录权鉴
  1. 已登录
    （1）访问登录，重定向到原来的页面
    （2）访问其他路由，
      - 是否有用户信息，有，放行
      - 没有，获取用户信息
        - 成功，放行
        - 不成功，清空用户信息，重定向到登录页，
  2. 未登录
    （1）访问登录，正常
    （2）访问其他路由，重定向到登录页
   */
  const userStore = useUserStore()
  const { token, username } = userStore
  const loginUrl = '/login'

  if (to.path === '/screen') {
    next()
    return
  }

  if (token) {
    if (to.path === loginUrl) {
      next(from)
    } else {
      if (username) {
        next()
      } else {
        try {
          await userStore.updateUserInfo()
          console.log(to)
          next({ ...to })
        } catch (err: any) {
          ElNotification({
            type: 'error',
            message: err.message,
          })
          userStore.clear()
          next({
            path: loginUrl,
            query: {
              redirect: to.path,
            },
          })
        }
      }
    }
  } else {
    if (to.path === loginUrl) {
      next()
    } else {
      next({
        path: loginUrl,
        query: {
          redirect: to.path,
        },
      })
    }
  }
})

router.afterEach((to) => {
  document.title = `${setting.title}-${to.meta?.title}`
  NProgress.done()
})
